package com.yl.chainStore.services.statistical

import com.baomidou.mybatisplus.extension.plugins.pagination.Page
import com.yl.chainStore.entity.pay.PayOrderCustomerPayLog
import com.yl.chainStore.entity.pay.PayOrderRefundLog
import com.yl.chainStore.pojo.dto.statistical.*
import com.yl.chainStore.pojo.vo.statistical.DailyCheckForSelectVo
import com.yl.chainStore.pojo.vo.statistical.IncomeSummarySelectVo
import com.yl.chainStore.pojo.vo.statistical.ReconciliationSelectVo
import org.apache.ibatis.annotations.Param

interface IPayStatisticalService {


	/**
	 * 按日期统计订单应付金额(日期  - 多个付款类型方式)
	 */
	fun getOrderStatisticalByDay(vo: IncomeSummarySelectVo):List<StatisticalOrderCollectionDto>

	/**
	 * 按日期统计充值记录(日期  - 多个付款类型方式)
	 */
	fun getCustomerBalanceInLogByDay(vo:IncomeSummarySelectVo):List<StatisticalBalanceInLogByDayDto>

	/**
	 * 按日期统计订单付款记录(日期  - 多个付款类型方式)
	 */
	fun getCustomerOrderPayLogDetailByDay(vo: IncomeSummarySelectVo):List<StatisticalBalanceInLogByDayDto>

	/**
	 * 按日期统计订单使用馈赠金记录(日期  - 馈赠金额)
	 */
	fun getCustomerOrderUseGiftMoneyByDay(vo:IncomeSummarySelectVo):Map<String,Long>

	/**
	 * 按日期统计订单退款记录(日期  - 退款金额)
	 */
	fun getCustomerOrderRefundByDay(vo:IncomeSummarySelectVo):Map<String,Long>

	/**
	 * 按日期统计订单付款总额
	 */
	fun getCustomerOrderPayLogSumMoneyByDay(vo: IncomeSummarySelectVo): List<OrderPayLogSumMoneyDto>

	/**
	 * 订单付款记录
	 */
	fun getOrderPayLog(vo: DailyCheckForSelectVo):List<PayOrderCustomerPayLog>

	/**
	 * 付款和退款记录
	 */
	fun getPayCustomerOrderPayAndRefundLog(vo:DailyCheckForSelectVo):List<PayCustomerOrderPayAndRefundLogDto>

	/**
	 * 导出付款和退款记录
	 */
	fun getPayCustomerOrderPayAndRefundLogExport(vo:DailyCheckForSelectVo):List<PayCustomerOrderPayAndRefundLogDto>

	/**
	 * 付款和退款记录
	 */
	fun getPayCustomerOrderPayAndRefundLogPage(vo:DailyCheckForSelectVo):Page<PayCustomerOrderPayAndRefundLogDto>


	/**
	 * 按付款类型统计充值记录
	 */
	fun getCustomerBalanceInLogByPayType(vo: IncomeSummarySelectVo): List<StatisticalBalanceInLogByTypeDto>

	/**
	 * 按付款类型统计付款总额
	 */
	fun getCustomerOrderPayLogSumMoneyByPayType( vo: IncomeSummarySelectVo): List<StatisticalBalanceInLogByTypeDto>

	/**
	 * 按付款类型查询退现总额
	 */
	fun getBalanceOutLogGroupByPayType(vo: IncomeSummarySelectVo):List<StatisticalBalanceInLogByTypeDto>

	/**
	 * 患者新增欠款总额 （时间内，订单应付金额 - 订单首付金额 ）
	 */
	fun  getNewAddOwnSumMoney(vo: ReconciliationSelectVo):Long

	/**
	 * 收欠款总额
	 */
	fun getPutAwayOwnSumMoney(vo: ReconciliationSelectVo):Long

	/**
	 * 现金流入总额
	 */
	fun getTopUpSumMoney(vo: ReconciliationSelectVo):Long

	/**
	 * 订单收入总额
	 */
	fun getPayOrderSumMoney(vo: ReconciliationSelectVo):Long

	/**
	 * 充值总额
	 */
	fun getOnlyTopUpBalanceSumMoney(vo: ReconciliationSelectVo):Long

	/**
	 * 每日订单总额 日期 - 总额
	 */
	fun getOrderPaySumMoneyByDay(vo: ReconciliationSelectVo):List<PaySumMoneyForDayDto>

	/**
	 * 收欠款总额
	 */
	fun getPutAwayOwnSumMoneyByDay(vo: ReconciliationSelectVo):List<PaySumMoneyForDayDto>

	/**
	 * 每日患者新增欠款总额 （时间内，订单应付金额 - 订单首付金额 ）
	 */
	fun  getNewAddOwnSumMoneyByDay(vo: ReconciliationSelectVo):List<PaySumMoneyForDayDto>

	/**
	 * 每日充值余额总额
	 */
	fun getOnlyTopUpBalanceSumMoneyByDay(vo: ReconciliationSelectVo):List<PaySumMoneyForDayDto>

	/**
	 * 每日订单支付充值总额
	 */
	fun getTopUpForPayOrderSumMoneyByDay(vo: ReconciliationSelectVo):List<PaySumMoneyForDayDto>

	/**
	 * 每日账户退费总额
	 */
	fun getOnlyBalanceToMoneySumByDay(vo: ReconciliationSelectVo):List<PaySumMoneyForDayDto>

	/**
	 * 每日订单退款总额
	 */
	fun getOrderBalanceToMoneySumByDay(vo:ReconciliationSelectVo):List<PaySumMoneyForDayDto>

	/**
	 * 每日订单退款至余额总额
	 */
	fun getOrderRefundToBalanceSumMoneyByDay(vo:ReconciliationSelectVo):List<PaySumMoneyForDayDto>

	/**
	 * 每日订单退款至现金总额
	 */
	fun getOrderRefundToMoneySumMoneyByDay(vo:ReconciliationSelectVo):List<PaySumMoneyForDayDto>
}
